//* require 是 CommonJS 模块系统的语法。由于您的 package.json 文件中包含 "type": "module"，这告诉 Node.js 将 .js 文件作为 ES 模块处理。
//* 1、将 main.js 重命名为 main.cjs 2、 使用 ES 模块语法。如果想要保持 .js 扩展名并使用 ES 模块语法，您需要使用 import 语句代替 require。
//* 例如：import { app, BrowserWindow } from 'electron'; import path from 'path';

// electron/main.js
const { app, BrowserWindow, Menu, screen } = require("electron");
const path = require("path");

// 是否是生产环境
const isPackaged = app.isPackaged;

// 禁止显示默认菜单
Menu.setApplicationMenu(null);

// 主窗口
let mainWindow;

const createWindow = () => {
    // 创建浏览器窗口
    mainWindow = new BrowserWindow({
        // 默认窗口标题，如果由loadURL()加载的HTML文件中含有标签<title>，此属性将被忽略。
        title: "Electron + Vue3",
        width: 800,
        height: 600,
        // 设置窗口尺寸为屏幕工作区尺寸
        // width: screen.getPrimaryDisplay().workAreaSize.width,
        // height: screen.getPrimaryDisplay().workAreaSize.height,
        // 设置最小尺寸
        // minWidth: 800,
        // minHeight: 600,
        // 窗口图标。 在 Windows 上推荐使用 ICO 图标来获得最佳的视觉效果, 默认使用可执行文件的图标.
        // 在根目录中新建 build 文件夹存放图标等文件
        icon: path.resolve(__dirname, "./build/icons/logo.ico"),
    });
    process.env["ELECTRON_DISABLE_SECURITY_WARNINGS"] = "true";

    // 开发环境下，打开开发者工具。
    if (!isPackaged) {
        mainWindow.webContents.openDevTools();
    }
    // mainWindow.loadFile(path.join(__dirname, "index.html"));
    // 如果使用了 nginx 代理，url 改为代理地址 使用 loadURL 加载 http://localhost:3004
    // mainWindow.loadURL("http://localhost:3000/");
    mainWindow.loadURL(`file://${path.join(__dirname, "../dist/index.html")}`);
};

// 在应用准备就绪时调用函数
app.whenReady().then(() => {
    createWindow();

    app.on("activate", () => {
        // 通常在 macOS 上，当点击 dock 中的应用程序图标时，如果没有其他
        // 打开的窗口，那么程序会重新创建一个窗口。
        if (BrowserWindow.getAllWindows().length === 0) createWindow();
    });
});

// 除了 macOS 外，当所有窗口都被关闭的时候退出程序。 因此，通常对程序和它们在任务栏上的图标来说，应当保持活跃状态，直到用户使用 Cmd + Q 退出。
app.on("window-all-closed", () => {
    if (process.platform !== "darwin") app.quit();
});

// 如果开发环境使用了 nginx 代理，禁止证书报错
if (!isPackaged) {
    // 证书的链接验证失败时，触发该事件
    app.on("certificate-error", function (event, webContents, url, error, certificate, callback) {
        event.preventDefault();
        callback(true);
    });
}
